#define __GAMMA__ 1
#define __MOMENTUM_ORDER__ 1
#pragma once

#include <stdio.h>
#include <stdlib.h>

#include <math.h>
#include <string.h>

#include <complex.h>

#define Nc 3

//
typedef double mycomplex[2];

typedef mycomplex complexspin[4];
typedef mycomplex complexcolor[3];

typedef complexspin complexcolorspin[3];
typedef complexcolor complexspincolor[4];


//

typedef complex spin[4];
typedef complex color[3];

typedef spin colorspin[3];
typedef color spincolor[4];

typedef spin spinspin[4];
typedef spinspin colorspinspin[3];
typedef colorspinspin colorcolorspinspin[3];


typedef spinspin sss[4];
typedef sss ssss[4];
typedef ssss cssss[3];
typedef cssss ccssss[3];
typedef ccssss cccssss[3];
typedef cccssss ccccssss[3];

typedef double realspin[4];
typedef double realcolor[3];

typedef realspin realcolorspin[3];
typedef realcolor realspincolor[4];

typedef realspin realspinspin[4];
typedef realspinspin realcolorspinspin[3];
typedef realcolorspinspin realcolorcolorspinspin[3];

typedef colorcolorspinspin ftmom_ccss[140];

typedef colorcolorspinspin r_ccss[2];
typedef r_ccss rr_ccss[2];
typedef rr_ccss gamma_rr_ccss[16];
typedef r_ccss gamma_r_ccss[16];

typedef colorcolorspinspin gamma_ccss[16];

typedef complex  PM[2];
typedef PM O5PM[5];
typedef O5PM O55PM[5];

typedef complex O5[5];
typedef O5 O55[5];

typedef O55 rO55[2];
 
typedef colorcolorspinspin PM_ccss[2];
typedef PM_ccss O5PM_ccss[5];

typedef O5PM_ccss r_O5PM_ccss[2];
typedef r_O5PM_ccss rr_O5PM_ccss[2];
typedef rr_O5PM_ccss rrr_O5PM_ccss[2];
typedef rrr_O5PM_ccss rrrr_O5PM_ccss[2];


typedef ccccssss PM_ccccssss[2];
typedef PM_ccccssss O5PM_ccccssss[5];

typedef O5PM_ccccssss r_O5PM_ccccssss[2];

typedef ccccssss O5_ccccssss[5];
typedef O5_ccccssss r_O5_ccccssss[2];

//Too big to be defined static
//typedef r_O5PM_ccccssss rr_O5PM_ccccssss[2];
//typedef rr_O5PM_ccccssss rrr_O5PM_ccccssss[2];
//typedef rrr_O5PM_ccccssss rrrr_O5PM_ccccssss[2];


#include "global.c"
#include "momentum.c"
#include "dirac.c"

#include "endianess.c"
#include "ft.c"

#include "print_propagator.c"
#include "contraction.c"

#include "rotate.c"

#include "momentum.c"
#include "dirac.c"

#include "compute_s0_ff.c"
#include "invert_matrix.c"
#include "jacknife.c"
#include "write_output.c"
#include "read_input.c"
#include "assign_name.c"
#include "Oa2g2.c"
#include "RGI.c"

// 4F
#include "4F_projector.c"
#include "4F_NonAmputedGF.c"
#include "solve_linear.c" // to solve the inhomogenous linear system in the dynamical and delta matrix
